unit UHilo;
interface
uses
Classes, SysUtils, Math;
type
Vect= array [0..31] of double;
Hilo = class(TThread)
private
{ Private declarations }
PuertoFisico, PuertoAbs: integer;
protected
procedure Execute; override;
public
senalT, senalL: Vect;
adr: integer;
dat: integer;
constructor Create(const prioridad, pFisico, pAbs: integer);
procedure paintTemperaturaH();
procedure paintLuzH();
procedure imprimirDatos();
end;
implementation
uses
Uclient;
constructor Hilo.Create(const prioridad, pFisico, pAbs: integer);
var
i: integer;
begin
inherited Create(False);
FreeOnTerminate:= False;
PuertoFisico:= pFisico;
PuertoAbs:= pAbs;
adr:= 0;
dat:= 0;
for i:= 0 to Length(senalT)-1 do
begin
senalT[i]:= 0;
senalL[i]:= 0;
end;
Priority:= TThreadPriority(prioridad);
end;
FUNCTION PortIn(IOport: WORD): BYTE; ASSEMBLER; REGISTER;
ASM
MOV DX,AX
IN AL,DX
END;
PROCEDURE PortOut(IOport: WORD; Value: BYTE ); ASSEMBLER; REGISTER;
ASM
XCHG DX,AX
OUT DX,AL
END;
procedure Hilo.Execute;
begin
while true do
begin
while FCliente.IdTCPClient1.Connected do
begin
dat:= StrToInt(FCliente.IdTCPClient1.ReadLn);
if (dat = 254)or(dat = 255) then
begin
PortOut(PuertoFisico, dat);
adr:= dat;
end
else
begin
if adr <> 0 then
begin
case adr of
254: begin
PortOut(PuertoFisico, round(dat/2.56565656)); //Pongo temperatura
Synchronize(paintTemperaturaH);
end;
255: begin
PortOut(PuertoFisico, dat);
Synchronize(paintLuzH);
end;
end;
end;
end;
end;
dat:= 0;
Synchronize(paintTemperaturaH);
Synchronize(paintLuzH);
end;
end;
procedure Hilo.paintTemperaturaH();
var
i: integer;
begin
FCliente.Series1.Clear;
for i:= Length(senalT)-1 downto 1 do
senalT[i]:= senalT[i-1];
senalT[0]:= dat/2.56565656;
FCliente.Series1.AddArray(senalT);
FCliente.EIstantaneoT.Text:= FloatToStr(Round(dat/2.56565656));
if (Round(dat/2.56565656) < StrToInt(FCliente.ETemperatura.Text)) then
FCliente.EOnOfT.Color:= $00FF8000
else
FCliente.EOnOft.Color:= $000E1AF1;
end;
procedure Hilo.paintLuzH();
var
i: integer;
begin
FCliente.Series2.Clear;
for i:= Length(senalL)-1 downto 1 do
senalL[i]:= senalL[i-1];
senalL[0]:= dat;
FCliente.Series2.AddArray(senalL);
FCliente.EInstantaneoL.Text:= IntToStr(dat);
if (dat < StrToInt(FCliente.ELuz.Text)) then
FCliente.EOnOfL.Color:= $00FF8000
else
FCliente.EOnOfL.Color:= $000E1AF1;
end;
procedure Hilo.imprimirDatos();
begin
FCliente.MMensajes.Lines.Add(IntToStr(dat));
end;
end.
               (
geocities.com/tiger928rs)